#ifndef _UART_CONSOLE_H
#define _UART_CONSOLE_H

#include <rtthread.h>
#include <myCommonDefs.h>
#include <interrupt.h>
#include <rtconfig.h>



#define hw_APB_UART1_BASE            0xA0000100


/***********UART1 REGS********************/
#define REG_UART1_APB_RBR         __REG32(hw_APB_UART1_BASE + 0x00)
#define REG_UART1_APB_THR         __REG32(hw_APB_UART1_BASE + 0x00)
#define REG_UART1_APB_DLL         __REG32(hw_APB_UART1_BASE + 0x00)

#define REG_UART1_APB_DLH         __REG32(hw_APB_UART1_BASE + 0x04)
#define REG_UART1_APB_IER         __REG32(hw_APB_UART1_BASE + 0x04)

#define REG_UART1_APB_IIR         __REG32(hw_APB_UART1_BASE + 0x08)
#define REG_UART1_APB_FCR         __REG32(hw_APB_UART1_BASE + 0x08)

#define REG_UART1_APB_LCR         __REG32(hw_APB_UART1_BASE + 0x0C)
#define REG_UART1_APB_MCR         __REG32(hw_APB_UART1_BASE + 0x10)
#define REG_UART1_APB_LSR         __REG32(hw_APB_UART1_BASE + 0x14)
// #define REG_UART1_APB_MSR         __REG32(hw_APB_UART1_BASE + 0x18)
// #define REG_UART1_APB_SCR         __REG32(hw_APB_UART1_BASE + 0x1C)

// 波特率 divisor(DLH+DLL) = 400'000'000 / (16 * baudrate)
#define UART_APB_BAUD115200_DLH     0x00
#define UART_APB_BAUD115200_DLL     0xD9
// #define UART_APB_BAUD57600_DLH      0x01
// #define UART_APB_BAUD57600_DLL      0xB2
// #define UART_APB_BAUD38400_DLH      0x02
// #define UART_APB_BAUD38400_DLL      0x8B

#define UART1_APB_IRQ_NUMBER       62

#ifdef RT_USING_CONSOLE
//终端串口函数
void UartConsoleInit(void);
void UartConsoleSendOneByte(rt_uint8_t dat);
char UartConsoleReadOneByte(int *dat);

//邮箱 用于收发 串口内容 避免外部函数直接使用mailbox变量
int UartConsoleMailBoxInit(void);
void UartConsoleMailBoxSend(rt_uint32_t value);
char UartConsoleMailBoxRecv(void);

//中断处理函数
void UartConsoleISR(int vector, void *param);
#endif

#endif

